/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package configuraciones;

import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.cip.esymons.general.be.Permiso;

/**
 *
 * @author lizardo
 */
public class PermisoController {
    private Permiso permiso;
    private PermisoDelegate delegadoPermiso;
    private List<Permiso> listaPermiso;

    /*********************** Constructor de la clase *************************/
    public PermisoController() {
        inicializar();
    }

    /*************************** Sets y Gettters *****************************/
    public PermisoDelegate getDelegadoPermiso() {
        return delegadoPermiso;
    }
    public void setDelegadoPermiso(PermisoDelegate delegadoPermiso) {
        this.delegadoPermiso = delegadoPermiso;
    }

    public Permiso getPermiso() {
        return permiso;
    }
    public void setPermiso(Permiso permiso) {
        this.permiso = permiso;
    }

    public List<Permiso> getListaPermiso() {
        return listaPermiso;
    }
    public void setListaPermiso(List<Permiso> listaPermiso) {
        this.listaPermiso = listaPermiso;
    }

    /**************************** Metodos ************************************/
    public Permiso buscarPorCodigo(Integer codigo) {
        try {
            return delegadoPermiso.find(codigo);
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "No se pudo buscar el codigo del permiso. ", FacesMessage.SEVERITY_ERROR);
            mostrarMensaje("FATAL: ", ex.getMessage(), FacesMessage.SEVERITY_FATAL);
            return null;
        }
    }

    public String inicializar() {
        permiso = new Permiso();
        delegadoPermiso = new PermisoDelegate();
        listaPermiso = new ArrayList<Permiso>();
        listar();
        return "";
    }

    public String guardar() {
        try {
            permiso.setPmsActivo(true);
            delegadoPermiso.create(permiso);
            mostrarMensaje("INFO: ", "Permiso creado sastifactoriamente...", FacesMessage.SEVERITY_INFO);
            cancelar();
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "No se puede guardar el permiso. ", FacesMessage.SEVERITY_ERROR);
            mostrarMensaje("FATAL: ", ex.getMessage(), FacesMessage.SEVERITY_FATAL);
        }
        return null;
    }

    public String actualizar() {
        try {
            delegadoPermiso.edit(permiso);
            mostrarMensaje("INFO: ", "Permiso actualizado sastifactoriamente...", FacesMessage.SEVERITY_INFO);
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "No se puede modificar el permiso. ", FacesMessage.SEVERITY_ERROR);
            mostrarMensaje("FATAL: ", ex.getMessage(), FacesMessage.SEVERITY_FATAL);
        }
        return null;
    }

    public String eliminar() {
        try {
            permiso.setPmsActivo(false);
            delegadoPermiso.edit(permiso);
            mostrarMensaje("INFO: ", "Permiso desactivado sastifactoriamente...", FacesMessage.SEVERITY_INFO);
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "No se puede desactivar el permiso. ", FacesMessage.SEVERITY_ERROR);
            mostrarMensaje("FATAL: ", ex.getMessage(), FacesMessage.SEVERITY_FATAL);
        }
        return listar();
    }

    public String listar() {
        try {
            permiso = new Permiso();
            listaPermiso = delegadoPermiso.findAll();
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "No se puede listar el permiso. ", FacesMessage.SEVERITY_ERROR);
            mostrarMensaje("FATAL: ", ex.getMessage(), FacesMessage.SEVERITY_FATAL);
        }
        return "listar";
    }

    public String cancelar() {
        permiso = new Permiso();
        return null;
    }

    public String navegar_nuevo() {
        cancelar();
        return "nuevo";
    }

    public String navegar_editar() {
//        try {
//
//        } catch (Exception ex) {
//            Logger.getLogger(UsuarioWebController.class.getName()).log(Level.SEVERE, null, ex);
//        }
        return "editar";
    }

    public SelectItem[] getComboPermisos() {
        //este  metodo no usa converters
        try {
            //PreEventoDelegate delegadoPreevento = new PreEventoDelegate();
            System.out.println("Ingreso 1");
            SelectItem[] selects = null;
            listaPermiso = delegadoPermiso.findAll();
            selects = new SelectItem[listaPermiso.size()];
            int cont = 0;
            for (Permiso perm : listaPermiso) {
                //SelectItem item = new SelectItem(perm.getPmsCodigo(), perm.getPmsNombre());
                SelectItem item = new SelectItem(perm, perm.getPmsNombre());
                selects[cont++] = item;
            }
            return selects;
        } catch (Exception e) {
            System.out.println("Ingreso Error: " + e.getMessage());
            SelectItem[] selects = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen permisos");
            selects[0] = item;
            return selects;
        }
    }

    public void mostrarMensaje(String resumen, String detalle, FacesMessage.Severity severidad) {
        try {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        } catch (Exception e) {
            FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        }
    }

}
